package kt.base

import kotlin.properties.Delegates

class UserObservable{

    var name : String by Delegates.observable("no name .."){
        prop , old , new ->
            println("${prop}  ; ${old}  --> ${new}")

    }

    // 对属性进行拦截过滤
//    不过处理程序 返回值是 Boolean 来决定是否采用新值，即在属性被赋新值生效之前 会调用传递给 vetoable 的处理程序
//    当位true时，赋值成功，否则赋值失败

    var age : Int by Delegates.vetoable(0){
        prop , old , new ->
            new > old
    }




}

fun main() {
    var user = UserObservable()

//    user.name = "init"
//    user.name = "secondName"


    user.age = 5
    println("${user.age}")
    user.age = 10
    println("${user.age}")
    user.age = 6
    println("${user.age}")

}

//  var kt.base.UserObservable.name: kotlin.String  ; no name ..  --> init
//  var kt.base.UserObservable.name: kotlin.String  ; init  --> secondName


//  5
//  10
//  10


